package main

import (
	"bytes"
	"fmt"
	"io"
	"log"
	"mime/multipart"
	"net/http"
	"os"
	"path/filepath"
)

func main() {
	// 测试创建项目并上传图标的接口
	testCreateItemWithIcon()
}

func testCreateItemWithIcon() {
	// 创建一个简单的测试图片文件
	testImagePath := "test_icon.png"
	createTestImage(testImagePath)
	defer os.Remove(testImagePath) // 清理测试文件

	// 准备multipart表单数据
	var buf bytes.Buffer
	writer := multipart.NewWriter(&buf)

	// 添加表单字段
	writer.WriteField("name", "测试项目")
	writer.WriteField("description", "这是一个测试项目")
	writer.WriteField("content_type", "page")
	writer.WriteField("display_order", "1")
	writer.WriteField("status", "1")
	writer.WriteField("is_small", "false")

	// 添加文件字段
	file, err := os.Open(testImagePath)
	if err != nil {
		log.Fatalf("打开测试文件失败: %v", err)
	}
	defer file.Close()

	// 创建文件字段并设置正确的Content-Type
	part, err := writer.CreateFormFile("icon", filepath.Base(testImagePath))
	if err != nil {
		log.Fatalf("创建文件字段失败: %v", err)
	}
	
	fmt.Printf("上传文件: %s\n", filepath.Base(testImagePath))

	_, err = io.Copy(part, file)
	if err != nil {
		log.Fatalf("复制文件内容失败: %v", err)
	}

	err = writer.Close()
	if err != nil {
		log.Fatalf("关闭writer失败: %v", err)
	}

	// 发送HTTP请求
	req, err := http.NewRequest("POST", "http://localhost:8080/api/v1/items", &buf)
	if err != nil {
		log.Fatalf("创建请求失败: %v", err)
	}

	req.Header.Set("Content-Type", writer.FormDataContentType())

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		log.Fatalf("发送请求失败: %v", err)
	}
	defer resp.Body.Close()

	// 读取响应
	body, err := io.ReadAll(resp.Body)
	if err != nil {
		log.Fatalf("读取响应失败: %v", err)
	}

	fmt.Printf("响应状态: %s\n", resp.Status)
	fmt.Printf("响应内容: %s\n", string(body))

	if resp.StatusCode == http.StatusOK {
		fmt.Println("✅ 创建项目并上传图标成功!")
	} else {
		fmt.Printf("❌ 创建项目失败，状态码: %d\n", resp.StatusCode)
	}
}

// createTestImage 创建一个简单的测试图片文件（PNG格式）
func createTestImage(filename string) {
	// 创建一个最小的PNG文件（1x1像素，透明）
	pngData := []byte{
		0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, // PNG signature
		0x00, 0x00, 0x00, 0x0D, // IHDR chunk length
		0x49, 0x48, 0x44, 0x52, // IHDR
		0x00, 0x00, 0x00, 0x01, // width: 1
		0x00, 0x00, 0x00, 0x01, // height: 1
		0x08, 0x06, 0x00, 0x00, 0x00, // bit depth, color type, compression, filter, interlace
		0x1F, 0x15, 0xC4, 0x89, // CRC
		0x00, 0x00, 0x00, 0x0A, // IDAT chunk length
		0x49, 0x44, 0x41, 0x54, // IDAT
		0x78, 0x9C, 0x62, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, // compressed data
		0xE2, 0x21, 0xBC, 0x33, // CRC
		0x00, 0x00, 0x00, 0x00, // IEND chunk length
		0x49, 0x45, 0x4E, 0x44, // IEND
		0xAE, 0x42, 0x60, 0x82, // CRC
	}

	err := os.WriteFile(filename, pngData, 0644)
	if err != nil {
		log.Fatalf("创建测试图片失败: %v", err)
	}
}